package collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortListDemo2 {
    public static void main(String[] args) {
        List<Point> list = new ArrayList<>();
        list.add(new Point(1,2));
        list.add(new Point(12,22));
        list.add(new Point(3,9));
        list.add(new Point(8,8));
        list.add(new Point(7,6));
        list.add(new Point(19,36));
        list.add(new Point(5,4));
        System.out.println(list);

        /*
        使用该sort方法排序List集合时有一个前提条件:集合元素必须实现了Comparable接口
        可比较接口, sort方法会利用该接口上定义的抽象方法来对元素两两比较从而得知大小后
        进行排序。     因此元素没有实现该接口则编译不通过。
         */
//        Collections.sort(list);
        Comparator<Point> c = new Comparator<Point>() {
            @Override
            public int compare(Point o1, Point o2) {
                int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
                int len2 = o2.getX()*o2.getX()+o2.getX()*o2.getY();
                return len2-len1;
            }
        };
        Comparator<Point> d = (o1,o2)->
                o1.getX()*o1.getX()+o1.getY()*o1.getY()
                - o2.getX()*o2.getX()-o2.getY()*o2.getY();
        Collections.sort(list,c);
        System.out.println(list);

        Collections.sort(list,(o1,o2)->
                o1.getX()*o1.getX()+o1.getY()*o1.getY()
                 - o2.getX()*o2.getX()-o2.getY()*o2.getY());
        System.out.println(list);
    }
}
